package com.cg.asm.body.dao.user;

import com.cg.asm.body.domain.dto.user.UserInfoDTO;
import com.cg.asm.body.domain.dto.user.UserRoleDTO;
import com.cg.asm.body.domain.vo.user.UserEditVO;
import com.cg.asm.body.domain.vo.user.UserPagedVO;
import com.cg.asm.client.exception.MybatisExample;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public interface UserMapper {

    /**
     * 查询用户信息（分页）
     *
     * @param mybatisExample
     * @return
     */
    List<UserPagedVO> selectByUserInfo(MybatisExample mybatisExample);

    /**
     * 启用用户状态
     *
     * @param ids
     */
    void startAccountStatus(String[] ids);

    /**
     * 停用用户状态
     *
     * @param ids
     */
    void stopAccountStatus(String[] ids);

    /**
     * 校验用户是否唯一
     *
     * @param username
     * @return
     */
    String userIsUnique(@Param("username") String username);

    /**
     * 增加用户信息
     *
     * @param userInfoDTO
     */
    void saveUser(UserInfoDTO userInfoDTO);

    /**
     * 根据用户Id，查询编辑用户的详细信息
     *
     * @param userId
     * @return
     */
    UserEditVO userEditInfo(@Param("userId") String userId);

    /**
     * 保存编辑的用户信息
     *
     * @param userInfoDTO
     */
    void saveEditUser(UserInfoDTO userInfoDTO);

    /**
     * 根据用户Id删除用户信息
     *
     * @param ids
     */
    void delUser(String[] ids);

    /**
     * 根据用户Id删除用户角色信息
     *
     * @param userId
     */
    void delUserRole(@Param("userId") String userId);

    /**
     * 保存用户角色信息
     *
     * @param userRoleDTO
     */
    void saveUserRole(UserRoleDTO userRoleDTO);

    /**
     * 根据用户Id获取用户角色信息
     *
     * @param userId
     * @return
     */
    List<String> roleByUser(@Param("userId") String userId);

    /**
     * 保存上传的头像
     *
     * @param upAvatar
     * @param userId
     */
    void saveUpAvatar(@Param("upAvatar") String upAvatar, @Param("userId") String userId);

    /**
     * 根据用户Id更新密码信息
     * @param userId
     */
    void updateUserPwd(@Param("userPwd") String userPwd ,@Param("userId") String userId);
}
